package junior.util.mocking;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标注在VO的成员变量上，用于生成批量测试样本。
 * 
 * @author ZhangXiaoye
 *
 */
@Target(ElementType.FIELD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface OMocking {
	
	/** 为null的比例，设置0表示不为null，设置50表示一半为null */
	int nullPercentage() default 0;
	
	/** join：对象 */
	Class<?> joinClass() default Object.class;
	
	/** join：对象的成员变量名，请确保类型相同 */
	String joinFieldName() default "";
	
	/** join：确保每次join不同的实例，如果不能满足则报错 */
	boolean joinUnique() default false;
	
	/** 模拟时该变量的值从给定的列表中选择，设置后允许重复 */
	double[] numberValues() default {};
	
	/** 模拟时该变量的值大于等于此值 */
	double numberRangeFrom() default 0;
	
	/** 模拟时该变量的值小于此值，设置后允许重复 */
	double numberRangeTo() default 0;
	
	/** 如果变量类型是日期，设置使用dateRangeFrom以及dateRangeTo时的格式 */
	String dateFormat() default "yyyy-MM-dd HH:mm:ss";
	
	/** 模拟时该变量的值大于等于此值，允许重复 */
	String dateRangeFrom() default "";
	
	/** 模拟时该变量的值小于此值，允许重复 */
	String dateRangeTo() default "";
	
	/** 字符串变量的前缀 */
	String[] stringPrefixs() default {};
	
	/** 字符串变量的数字部分格式，按int处理，例如%5d可以用于车牌的后缀 */
	String stringFormat() default "%d";
}
